package com.eliza.v.server.tcp

import io.vertx.core.AbstractVerticle
import io.vertx.core.AsyncResult
import io.vertx.core.Vertx
import io.vertx.core.buffer.Buffer
import io.vertx.core.net.NetServer
import io.vertx.core.net.NetSocket

class VertxTCPServer : AbstractVerticle() {
    override fun start() {
        // 创建TCP服务器
        val server = vertx.createNetServer()

        // 处理连接请求
        server.connectHandler { socket: NetSocket ->
            socket.handler { buffer: Buffer ->
                // 在这里应该解析报文，封装为协议对象，并找到响应的处理类，得到处理结果，并响应
                println("接收到的数据为：$buffer")

                // 按照协议响应给客户端
                socket.write(Buffer.buffer("Hello Vertx from Server!"))
            }

            // 监听客户端的退出连接
            socket.closeHandler { close: Void? -> println("客户端退出连接") }
        }

        // 监听端口
        server.listen(33323) { res: AsyncResult<NetServer?> ->
            if (res.succeeded()) {
                println("服务器启动成功")
            }
        }
    }

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            Vertx.vertx().deployVerticle(VertxTCPServer())
        }
    }
}